import '@/assets/style/border.css'
import '@/assets/style/reset.css'
import { createApp } from 'vue'
import App from './App.vue'
// 引入路由
import router from './router'
// 引入elementplus
import ElementPlus from 'element-plus'

import * as ElementPlusIconsVue from '@element-plus/icons-vue'

import 'element-plus/dist/index.css'
import axios from 'axios';
import store from './store'
// 引入配置文件
import { BASE_URL } from './config'

// 配置全局的 baseURL 和 timeout
axios.defaults.baseURL = BASE_URL + '/api/';
axios.defaults.timeout = 500000;  // 5秒超时

const app = createApp(App)

app.use(ElementPlus)
app.use(ElementPlusIconsVue)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
    app.component(key, component)
}
app.use(router)
app.use(store)

app.mount('#app')


import { ElMessage } from 'element-plus';
// 请求拦截器：每次请求前添加 Authorization 头
axios.interceptors.request.use(
  (config) => {
    // 获取存储的 token（假设 token 存储在 localStorage 中）
    const token = JSON.parse(localStorage.getItem('token')); // 你也可以从 Vuex 或其他地方获取 token

    // 如果 token 存在，添加到请求头
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }

    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 错误响应拦截器（如果需要）
axios.interceptors.response.use(
  (response) => {
    if (response.data.code === 200){
        return response
    } else if (response.data.code === 1003){
        ElMessage.success({
            message: response.data.msg, // 显示的消息内容
            duration: 1000 // 消息显示的持续时间，单位是毫秒（这里设置为 1000 毫秒，即 1 秒）
          });
        localStorage.clear()
        window.location.href = '/login'
    }else{
        return response
    }
  },
  (error) => {
    // 处理错误，统一的错误处理逻辑
    if (error.response) {
        // 如果后端返回了错误响应
        const status = error.response.status;
        console.log('响应拦截器错误reponse',error.response)
  
        // 处理 token 过期或无效
        if (status === 401 || (error.response.data && error.response.data.code === 1003)) {
          console.log('Token expired or invalid. Please login again.');
          ElMessage.error({
            message: error.response.data.message || 'Token expired or invalid. Please login again.',
            duration: 1000 // 消息显示的持续时间，单位为毫秒
          });
          
          // 清除浏览器存储
          localStorage.clear();
          
          // 跳转到登录页面
          window.location.href = '/login';
          return;
        }
  
        // 其他常见的 HTTP 错误处理
        switch (status) {
          case 404:
            ElMessage.error('请求的接口不存在或路径错误');
            break;
          case 500:
            ElMessage.error('服务器出错，请稍后再试');
            break;
          default:
            ElMessage.error(`请求失败：${error.message}`);
            break;
        }
    } else  {
        // 如果没有返回响应（如网络错误等）
        ElMessage.error('网络错误，请检查网络连接');
      }
    return Promise.reject(error);
  }
);

export default axios;